package handler.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/*
 * HandlerInterceptor是工作流接口，即处理器拦截器。它允许自定义处理器执行链
 * 自定义拦截器可以针对某些处理器添加常见的预处理行为，而无需修改每个处理器实现
 */
public class SubpathHandlerInterceptor2 implements HandlerInterceptor {
    /*
     * 拦截处理器的执行。在HandlerMaping（处理器映射）确定适当的处理器对象后调用，
     * 但在HandlerAdapter（处理器适配器）调用处理器之前调用
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        System.out.println("路径为" + request.getServletPath() + "的处理器拦截器调用preHandle方法");
        return true;
    }

    /*
     * 拦截处理器的执行。在HandlerAdapter实际调用处理器后，但在DispatcherServlet呈现视图之前调用
     * 可以通过给定的ModelAndView向视图公开其他模型对象
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
        System.out.println("路径为" + request.getServletPath() + "的处理器拦截器调用postHandle方法");
    }

    /*
     * 请求处理完成后的回调，即呈现视图后。将在处理器执行的任何结果上调用，从而允许适当的资源清理
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        System.out.println("路径为" + request.getServletPath() + "的处理器拦截器调用afterCompletion方法");
    }
}
